package com.bbzn.device.client.utils;

import com.bbzn.device.client.constant.CookieConstant;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Created by 廖师兄
 * 2018-03-04 23:25
 */
@Slf4j
public class CookieUtil {
	private final static String COOKIE_DOMAIN = CookieConstant.DOMAIN;
	private final static String COOKIE_NAME = CookieConstant.TOKEN;

	/**
	 * 设置cookie
	 * @param response
	 * @param name
	 * @param value
	 * @param maxAge
	 */
	public static void set(HttpServletResponse response,
						   String name,
						   String value,
						   int maxAge) {
		Cookie cookie = new Cookie(name, value);
		cookie.setPath("/");
		cookie.setMaxAge(maxAge);
		response.addCookie(cookie);
	}

	//读取token

	public static String readLoginToken(HttpServletRequest request){
		Cookie[] cks = request.getCookies();
		if(cks != null){
			for(Cookie ck : cks){
				log.info("read cookieName:{},cookieValue:{}",ck.getName(),ck.getValue());
				if(StringUtils.equals(ck.getName(),COOKIE_NAME)){
					log.info("return cookieName:{},cookieValue:{}",ck.getName(),ck.getValue());
					return ck.getValue();
				}
			}
		}
		return null;
	}



	// 写入token
	public static void writeLoginToken(HttpServletResponse response,String token){
		Cookie ck = new Cookie(COOKIE_NAME,token);
//		ck.setDomain(COOKIE_DOMAIN);
		ck.setPath("/");//代表设置在根目录
		ck.setHttpOnly(true);
		//单位是秒。
		//如果这个maxage不设置的话，cookie就不会写入硬盘，而是写在内存。只在当前页面有效。
		ck.setMaxAge(60 * 60 * 24 * 365);//如果是-1，代表永久
		log.info("write cookieName:{},cookieValue:{}",ck.getName(),ck.getValue());
		response.addCookie(ck);
	}


	//删除token
	public static void delLoginToken(HttpServletRequest request,HttpServletResponse response){
		Cookie[] cks = request.getCookies();
		if(cks != null){
			for(Cookie ck : cks){
				if(StringUtils.equals(ck.getName(),COOKIE_NAME)){
					ck.setDomain(COOKIE_DOMAIN);
					ck.setPath("/");
					ck.setMaxAge(0);//设置成0，代表删除此cookie。
					log.info("del cookieName:{},cookieValue:{}",ck.getName(),ck.getValue());
					response.addCookie(ck);
					return;
				}
			}
		}
	}
}
